package br.com.sisgerenciamento.dto.pedido;

import java.io.Serializable;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.HashSet;

import br.com.sisgerenciamento.dto.cliente.ClienteDTO;
import br.com.sisgerenciamento.dto.endereco.EnderecoDTO;
import br.com.sisgerenciamento.dto.locacao.LocacaoDTO;
import br.com.sisgerenciamento.dto.produtoquantidade.ProdutoQuantidadeDTO;
import br.com.sisgerenciamento.dto.recebimento.RecebimentoDTO;
import br.com.sisgerenciamento.dto.usuario.UsuarioDTO;
import br.com.sisgerenciamento.exceptions.ApplicationException;
import br.com.sisgerenciamento.model.pedido.PedidoVO;
import br.com.sisgerenciamento.model.pedido.StatusPedidoEnum;
import br.com.sisgerenciamento.model.pedido.TipoEntregaEnum;
import br.com.sisgerenciamento.model.produtoquantidade.ProdutoQuantidadeVO;
import br.com.sisgerenciamento.model.recebimento.RecebimentoVO;
import br.com.sisgerenciamento.utilidades.TreatDate;
import br.com.sisgerenciamento.utilidades.TreatNumber;
import br.com.sisgerenciamento.utilidades.Validator;

public class PedidoDTO implements Serializable {

	private static final long serialVersionUID = 1L;
	private String codigo;
	private String dataHoraEmissao;
	private String dataEntrega;
	private String horaEntrega;
	private Integer entrega;
	private String telefone;
	private String telefone2;
	private String celular;
	private String celular2;
	private Integer status;
	private String desconto;
	private String acrescimo;
	private String subTotal;
	private String total;
	private Boolean impressoCozinha;
	private String referencia;
	private UsuarioDTO usuario;
	private String observacao;
	private ClienteDTO cliente = new ClienteDTO();
	private EnderecoDTO endereco = new EnderecoDTO() ;
	private LocacaoDTO locacaoVO;
	private ArrayList<ProdutoQuantidadeDTO> produtos;
	private ArrayList<RecebimentoDTO> recebimentos;
	
	public void validar() throws ApplicationException{
		Validator validator =  Validator.novo();
		validator.obrigatorio(getDataHoraEmissao(), getDataEntrega(), getHoraEntrega());
	}
	
	public PedidoVO getVO() throws NoSuchAlgorithmException{
		
		Validator validator =  Validator.novo();
		
		PedidoVO vo = new PedidoVO();
		vo.setCodigo(!validator.isNullOrZero(getCodigo()) ? new Long(getCodigo()) : null);
		vo.setDataHoraEmissao(TreatDate.format("dd/MM/yyyy HH:mm", getDataHoraEmissao()));
		vo.setDataEntrega(TreatDate.parseDate(getDataEntrega()));
		vo.setHoraEntrega(Integer.parseInt(getHoraEntrega().replace(":", "")));
		vo.setEntrega(TipoEntregaEnum.getByValor(getEntrega()));
		vo.setTelefone(validator.removerMascara(getTelefone()));
		vo.setTelefone2(validator.removerMascara(getTelefone2()));
		vo.setCelular(validator.removerMascara(getCelular()));
		vo.setCelular2(validator.removerMascara(getCelular2()));
		vo.setStatus(StatusPedidoEnum.getByValor(getStatus()));
		vo.setReferencia(getReferencia());
		vo.setImpressoCozinha(getImpressoCozinha());
		try{
			vo.setDesconto(TreatNumber.convertBigDecimal(getDesconto()));
		}catch (Exception e) {
			vo.setDesconto(null);
		}
		try{
			vo.setAcrescimo(TreatNumber.convertBigDecimal(getAcrescimo()));
		}catch (Exception e) {
			vo.setAcrescimo(null);
		}
		try{
			vo.setSubTotal(TreatNumber.convertBigDecimal(getSubTotal()));
		}catch (Exception e) {
			vo.setSubTotal(null);
		}
		try{
			vo.setTotal(TreatNumber.convertBigDecimal(getTotal()));
		}catch (Exception e) {
			vo.setTotal(null);
		}
		try {
			vo.setUsuario(getUsuario().getVO());
		} catch (NoSuchAlgorithmException e) {
			vo.setUsuario(null);
		}
		vo.setObservacao(getObservacao());
		vo.setCliente(getCliente().getVO());
		vo.setEndereco(getEndereco() != null ? getEndereco().getVO() : null);
		if(getLocacaoDTO() != null){
			vo.setLocacaoVO(getLocacaoDTO().getVO());
		}
		vo.setProdutos(  new HashSet<ProdutoQuantidadeVO>());
		if(getProdutos() != null && !getProdutos().isEmpty()){
			for (ProdutoQuantidadeDTO quantidadeDTO : getProdutos()) {
				vo.getProdutos().add(quantidadeDTO.getVO());
			}
		}
		
		vo.setRecebimentos(new HashSet<RecebimentoVO>());
		if(getRecebimentos() != null && !getRecebimentos().isEmpty()){
			for (RecebimentoDTO dto : getRecebimentos()) {
				vo.getRecebimentos().add(dto.getVO());
			}
		}
		
		return vo;
	}
	
	
	public String getCodigo() {
		return codigo;
	}
	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}
	public String getDataHoraEmissao() {
		return dataHoraEmissao;
	}
	public void setDataHoraEmissao(String dataHoraEmissao) {
		this.dataHoraEmissao = dataHoraEmissao;
	}
	public String getDataEntrega() {
		return dataEntrega;
	}
	public void setDataEntrega(String dataEntrega) {
		this.dataEntrega = dataEntrega;
	}
	public String getHoraEntrega() {
		return horaEntrega;
	}
	public void setHoraEntrega(String horaEntrega) {
		this.horaEntrega = horaEntrega;
	}
	public Integer getEntrega() {
		return entrega;
	}
	public void setEntrega(Integer entrega) {
		this.entrega = entrega;
	}
	public String getTelefone() {
		return telefone;
	}
	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}
	public String getCelular() {
		return celular;
	}
	public void setCelular(String celular) {
		this.celular = celular;
	}
	public Integer getStatus() {
		return status;
	}
	public void setStatus(Integer status) {
		this.status = status;
	}
	public String getDesconto() {
		return desconto;
	}
	public void setDesconto(String desconto) {
		this.desconto = desconto;
	}
	public String getAcrescimo() {
		return acrescimo;
	}
	public void setAcrescimo(String acrescimo) {
		this.acrescimo = acrescimo;
	}
	public String getSubTotal() {
		return subTotal;
	}
	public void setSubTotal(String subTotal) {
		this.subTotal = subTotal;
	}
	public String getTotal() {
		return total;
	}
	public void setTotal(String total) {
		this.total = total;
	}
	public UsuarioDTO getUsuario() {
		return usuario;
	}
	public void setUsuario(UsuarioDTO usuario) {
		this.usuario = usuario;
	}
	public String getObservacao() {
		return observacao;
	}
	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}
	public ClienteDTO getCliente() {
		return cliente;
	}
	public void setCliente(ClienteDTO cliente) {
		this.cliente = cliente;
	}
	public EnderecoDTO getEndereco() {
		return endereco;
	}
	public void setEndereco(EnderecoDTO endereco) {
		this.endereco = endereco;
	}
	public LocacaoDTO getLocacaoDTO() {
		return locacaoVO;
	}
	public void setLocacaoDTO(LocacaoDTO locacaoVO) {
		this.locacaoVO = locacaoVO;
	}
	public ArrayList<ProdutoQuantidadeDTO> getProdutos() {
		return produtos;
	}
	public void setProdutos(ArrayList<ProdutoQuantidadeDTO> produtos) {
		this.produtos = produtos;
	}

	public LocacaoDTO getLocacaoVO() {
		return locacaoVO;
	}

	public void setLocacaoVO(LocacaoDTO locacaoVO) {
		this.locacaoVO = locacaoVO;
	}

	public ArrayList<RecebimentoDTO> getRecebimentos() {
		return recebimentos;
	}

	public void setRecebimentos(ArrayList<RecebimentoDTO> recebimentos) {
		this.recebimentos = recebimentos;
	}
	
	public String getTelefone2() {
		return telefone2;
	}

	public void setTelefone2(String telefone2) {
		this.telefone2 = telefone2;
	}

	public String getCelular2() {
		return celular2;
	}

	public void setCelular2(String celular2) {
		this.celular2 = celular2;
	}

	public String getHoraFormatada(){
		String hora = "";
		if(horaEntrega != null){
			hora = horaEntrega.substring(0, 2) + ":" + horaEntrega.substring(2, 4);
		}
		return hora;
	}

	public String getReferencia() {
		return referencia;
	}

	public void setReferencia(String referencia) {
		this.referencia = referencia;
	}

	public Boolean getImpressoCozinha() {
		return impressoCozinha;
	}

	public void setImpressoCozinha(Boolean impressoCozinha) {
		this.impressoCozinha = impressoCozinha;
	}

	
	
	
}
